package isadmin

import (
	"feishup2pclient/msg"
	"fmt"
	"os"
	"os/exec"
	"runtime"
)

// 用来检测当前程序运行是否具有管理员权限
func IsAdmin() bool {
	if isAdmin() {
		fmt.Println("程序具有管理员权限")
		return true
	} else {
		showErrorMessage("没有管理员权限，程序无法使用，请右键单击后使用管理员权限运行此程序。")
		return false
	}
}

// 检查当前用户是否具有管理员权限
func isAdmin() bool {
	if runtime.GOOS == "windows" {
		return isAdminWindows()
	} else {
		return isAdminUnix()
	}
}

// 检查 Windows 系统下当前用户是否具有管理员权限
func isAdminWindows() bool {
	// 检查操作系统类型
	if runtime.GOOS != "windows" {
		return false
	}

	// 检查当前用户是否具有管理员权限
	_, err := os.Open("\\\\.\\PHYSICALDRIVE0")
	if err != nil {
		return false
	}

	return true
}

// 检查 Unix 系统下当前用户是否具有管理员权限
func isAdminUnix() bool {
	// 检查操作系统类型
	if runtime.GOOS == "windows" {
		return false
	}

	// 检查当前用户是否具有管理员权限
	uid := os.Geteuid()
	return uid == 0
}

// 弹出消息框显示错误信息（仅限 Windows）
func showErrorMessage(message string) {
	cmd := exec.Command("cmd", "/C", "msg", "*", message)
	err := cmd.Run()
	if err != nil {
		msg.SendMessage("无法打开弹窗")
		// log.Fatalf("Failed to display error message: %v", err)
	}
}
